package br.com.remedioCerto.dao;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import br.com.remedioCerto.model.Estoque;
import br.com.remedioCerto.model.Remedio;

public class EstoqueDao extends BasicoDao<Estoque> {

	public static final String ESTOQUE_TB = "ESTOQUE";
	 
	public static final String ESTOQUE_COLUNA_ID = "ID";
	public static final String ESTOQUE_COLUNA_REMEDIO_ID = "REMEDIO_ID";
	public static final String ESTOQUE_COLUNA_QTD_CAIXA = "QTD_CAIXA";
	public static final String ESTOQUE_COLUNA_QTD_ATUAL = "QTD_ATUAL";
	public static final String REMEDIO_COLUNA_VENCIMENTO = "VENCIMENTO";
	
	 
	public static final String ESTOQUE_CREATE_TABLE = "CREATE TABLE "	
						+ ESTOQUE_TB 				+ "  (" 
						+ ESTOQUE_COLUNA_ID 		+ " INTEGER PRIMARY KEY AUTOINCREMENT, "
						+ ESTOQUE_COLUNA_REMEDIO_ID + " INTEGER NOT NULL, " 
						+ ESTOQUE_COLUNA_QTD_CAIXA 	+ " INTEGER NOT NULL, " 
						+ ESTOQUE_COLUNA_QTD_ATUAL 	+ " REAL  	NOT NULL, "
						+ REMEDIO_COLUNA_VENCIMENTO + " TEXT 	NOT NULL, "
						
						+ " FOREIGN KEY("+ESTOQUE_COLUNA_REMEDIO_ID+") REFERENCES "
						+ RemedioDao.REMEDIO_TB + "(" + RemedioDao.REMEDIO_COLUNA_ID + "));";
	
	
	public EstoqueDao(Context context) {
		super(context);
	}

	@Override
	protected ContentValues toContent(Estoque estoque) {
		ContentValues cv = new ContentValues();
		cv.put(ESTOQUE_COLUNA_QTD_CAIXA, estoque.getQuantidadeCaixa());
		cv.put(ESTOQUE_COLUNA_QTD_ATUAL, estoque.getQuantidadeAtual());
		cv.put(REMEDIO_COLUNA_VENCIMENTO, estoque.getValidade() != null ? estoque.getValidade().getTimeInMillis(): null );
		cv.put(ESTOQUE_COLUNA_REMEDIO_ID, estoque.getRemedio().getId());
		return cv;
	}


	@Override
	protected Estoque fromCursor(Cursor c) {
		if (c == null || c.getCount() < 1) {
			return null;
		}
	
		Estoque estoque = new Estoque();
		
		estoque.setId(c.getLong(c.getColumnIndex(ESTOQUE_COLUNA_ID)));
		estoque.setQuantidadeCaixa(c.getInt(c.getColumnIndex(ESTOQUE_COLUNA_QTD_CAIXA)));
		estoque.setQuantidadeAtual(c.getDouble(c.getColumnIndex(ESTOQUE_COLUNA_QTD_ATUAL)));
		
		Calendar validade = Calendar.getInstance();
		validade.setTimeInMillis(c.getLong(c.getColumnIndex(REMEDIO_COLUNA_VENCIMENTO)));
		estoque.setValidade(validade);
		
		Remedio remedio = new Remedio();
		remedio.setId(c.getLong(c.getColumnIndex(ESTOQUE_COLUNA_REMEDIO_ID)));
		estoque.setRemedio(remedio);
		
		return estoque;
	}

	public void adiciona(Estoque estoque){
		
		Long id = inserir(ESTOQUE_TB, toContent(estoque));
		if(id!= null && id > 0)estoque.setId(id);
	}
	
	public void atualiza(Estoque estoque){
		
		atualizar(ESTOQUE_TB, toContent(estoque), ESTOQUE_COLUNA_ID,estoque.getId());
	}

	public void remove(Long id){
		remover(ESTOQUE_TB, ESTOQUE_COLUNA_ID, id);
	}

	public Cursor lista(){
		return consultarTodos(ESTOQUE_TB);
	}
	
	public List<Estoque> listaList() {
		List<Estoque> listaEstoque = new ArrayList<Estoque>();
		Cursor c = lista();
	
		while (!c.isAfterLast()) {
			Estoque e = fromCursor(c);
			listaEstoque.add(e);
			c.moveToNext();
		}
		c.close();

		return listaEstoque;
	}
	
	public List<Estoque> listaPorRemedio(Long remedioId) {
		List<Estoque> listaEstoque = new ArrayList<Estoque>();
		String condicao= ESTOQUE_COLUNA_REMEDIO_ID +" = "+remedioId ;
		Cursor c = consultaBasica(ESTOQUE_TB, null, condicao , null);
		
		while (!c.isAfterLast()) {
			Estoque e = fromCursor(c);
			listaEstoque.add(e);
			c.moveToNext();
		}
		c.close();

		return listaEstoque;
	}
	
	public boolean removerPorRemedio(long remedioId) {

		return  database.delete(ESTOQUE_TB, ESTOQUE_COLUNA_REMEDIO_ID + " = " + remedioId, null) > 0;
	}
	
}
